package stream;


import java.io.File;
import java.io.IOException;
import java.util.Scanner;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * 删除文件的Demo案例
 */
@SuppressWarnings({"all"})
public class Demo4 {

    public static void main(String[] args) {
        // 1. 先输入要扫描的目录以及要删除的文件名
        Scanner in = new Scanner(System.in);
        System.out.println("请输入要删除的文件目录: ");
        String rootDirPath = in.nextLine(); // 文件目录
        System.out.println("请输入要删除的文件名: ");
        String toDeleteName = in.nextLine(); // 期望删除的文件名
        File rootDir = new File(rootDirPath);
        if (!rootDir.isDirectory()){
            System.out.println("输入的文件路径有误!");
            return;
        }
        // 2. 遍历目录，把指定目录的文件和子目录都遍历，找到要删除的文件
        scanDir(rootDir, toDeleteName);
        in.close();
    }

    /**
     * 递归遍历 rootDir 的目录 并删除 toDeleteName 文件
     * @param rootDir
     * @param toDeleteName
     */
    private static void scanDir(File rootDir, String toDeleteName) {
        // 1. 先列出 rootDir 有哪些内容
        File[] files = rootDir.listFiles();
        if (files == null){
            // rootDir 是一个空目录
            return;
        }
        // 2. 遍历当前列出的这些内容，如果是普通文件，就检测文件名是否相同，进行对应的删除逻辑
        for (File f : files) {
            if (f.isFile()) {
                if (f.getName().contains(toDeleteName)) {
                    // 要删除的文件找到了
                    deleteFile(f);
                }else {
                    // 如果是一个目录
                    scanDir(f, toDeleteName); // 递归遍历
                }
            }
        }
    }

    private static void deleteFile(File f) {
        try(Scanner in = new Scanner(System.in);) {
            System.out.println(f.getCanonicalPath() + " 确认要删除吗? (y/n)");
            char choice = in.nextLine().charAt(0);
            if (choice == 'Y' || choice == 'y'){
                f.delete();
                System.out.println("文件成功删除!");
            }else{
                System.out.println("文件放弃删除!");
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
